package com.lh.createData.service;

import com.lh.createData.dto.ActionDto;
import com.lh.createData.model.ActionModel;
import com.lh.createData.model.ActionProductModel;
import com.lh.createData.model.ActionUserCountModel;
import com.lh.createData.model.ActionUserIniModel;
import com.lh.createData.model.InPutParam.*;

import java.util.List;

/**
 * @author ：梁昊，后端工程师：梁昊
 * @create 2021-07-20 12:51
 * @function
 * @editLog
 */
public interface ActionService {
    <T> String getSeparateTableNo(T id, Class<T> tClass);

    /**
     * 根据项目ID，得到功能菜单点击次数统计
     *
     * @param actionInParam com.lh.createData.model.InPutParam.ActionInParam
     * @return 项目基础信息
     */
    List<ActionModel> selectActionTotalForInNum(ActionInParam actionInParam);

    /**
     * 生成项目节点树
     *
     * @param actionInParam 分表标识ID
     * @return 项目基础信息
     */
    List<ActionDto> createProjectNode(ActionInParam actionInParam);

    /**
     * 生成产品树
     *
     * @param actionInParam 项目CODE
     * @return 项目基础信息
     */
    List<ActionModel> createProductTree(ActionInParam actionInParam);

    List<ActionModel> getMenuListGroupBy(ActionInParam actionInParam);

    List<ActionModel> getProjectListGroupBy(ActionInParam actionInParam);

    /**
     * 展示端方法：为用户时长与界面跳转提供原始数据
     *
     * @param actionUserIniInParam com.lh.createData.model.InPutParam.ActionUserIniInParam
     * @return 月统计
     */
    List<ActionUserIniModel> selectActionForUserTimeAndJump(ActionUserIniInParam actionUserIniInParam);

    int updateActionTotalForInNum(ActionInParam actionInParam);

    /**
     * 展示端方法：更新统计次数
     *
     * @param actionUpdateCountInParam com.lh.createData.model.InPutParam.ActionUpdateCountInParam
     * @return 影响条数
     */
    int updateActionCounter(ActionUpdateCountInParam actionUpdateCountInParam);

    /**
     * 展示端方法：用户数、同比
     *
     * @param actionUserCountInParam com.lh.createData.model.InPutParam.ActionUserCountInParam
     * @return 得到项目信息与标定、分值信息
     */
    List<ActionUserCountModel> createUserCount(ActionUserCountInParam actionUserCountInParam);

    /**
     * 得到产品信息，并保存
     *
     * @param separateId 分表标识ID
     * @return 每月统计一次
     */
    List<ActionProductModel> selectProductGroupBy(String separateId);

    int clearHistoryData(DeleteDataInParam deleteDataInParam);
}